import 'taro-ui/dist/style/index.scss'
import Taro, { Component } from '@tarojs/taro'
import { Provider } from '@tarojs/redux'
import { set as setGlobalData, get as getGlobalData } from './global_data'
import Index from './pages/index'
import configStore from './store'
import utils from './utils/util'
import http from './utils/http'
import './app.scss'

// 如果需要在 h5 环境中开启 React Devtools
// 取消以下注释：
// if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5')  {
//   require('nerv-devtools')
// }

const store = configStore()

class App extends Component {

    constructor(props) {
        super(props);
    }
    componentWillMount () {
        // Taro.loadFontFace({
        //   family: 'HF',
        //   source: 'url("https://www.bkdau.cn/xiaochengxu/qc/font/MF.woff")',
        //   success: console.log,
        //   fail: console.log
        // })
    }
    componentDidMount () {
        Taro.getSystemInfo({ //  获取页面的有关信息
            success: (res) => {
                setGlobalData('model', res.model.indexOf('iPhone X') > -1 ? true : '')
                setGlobalData('navigationBarHeight', res.screenHeight - res.windowHeight)
            }
        })
    }

    componentDidShow () {
        let e = this.$router.params;
        setGlobalData('scene', e.query)
        setGlobalData('scene', e.scene)
        setGlobalData('userInfo', utils.getUserInfo())
        setGlobalData('weChatInfo', utils.getWechatInfo())
        setGlobalData('openId', this.getValueSync('openId'))
    }

    componentDidHide () { }

    componentDidCatchError () { }

    config = {
        pages: [
            'pages/index/index', // 首页

            'pages/message/messageList/index', //消息列表
            'pages/message/messageDetails/index', //消息详情页

            'pages/medicineCabinetManagement/index', // 药箱管理
            'pages/medicalkitDetails/index', // 药箱详情页

            'pages/nearlyEffective/index', // 近效期药品列表
            'pages/nearlyEffective/recyclingSubmit/index', // 回收信息

            'pages/drugAdministration/index', //药品管理
            'pages/useDrug/index', // 使用药品
            'pages/drugDetails/index', //药品详情

            'pages/consumptionRecord/index', // 消耗记录
            'pages/consumptionRecord/recordDetails/index', // 消耗详情

            'pages/inspection/index', //巡检介绍页面
            'pages/scan/index', // 巡检扫描页面
            'pages/signin/index', // 巡检签到（准备签到）
            'pages/inspectionSubmit/index', //提交签到

            'pages/signRecord/index', // 签到记录
            'pages/signinDetails/index', // 签到记录详情页

            'pages/setting/index', // 设置页面
            'pages/setting/aboutUs/index', //关于我们
            'pages/setting/updatePassword/index', // 修改密码
            'pages/setting/messageSetting/index', // 消息设置中心

            'pages/login/index', // 登录页面
        ],
        window: {
            backgroundTextStyle: 'dark',
            navigationBarBackgroundColor: '#fff',
            navigationBarTitleText: '麦小逗急救箱',
            navigationBarTextStyle: 'black',
            onReachBottomDistance: 50,
            backgroundColor: '#f5f5f5'
        },
        networkTimeout: {
            request: 20000,
            connectSocket: 20000,
            uploadFile: 60000,
            downloadFile: 60000
        },
        debug: true,
        permission: {
            'scope.userLocation': {
                desc: '你的位置信息将用于小程序位置接口的效果展示'
            }
        }
    }

    wxLogin = (callBack) => { //微信自带登录获取code
        Taro.login({
            success: (res) => {
                if (callBack) {
                    if (res.code) {
                        callBack(true, res.errMsg, res.code) //成功的回调返回 获取的状态，提示，code
                    } else {
                        callBack(false, res.errMsg)
                    }
                }
            },
            fail: () => {
                if (callBack) {
                    callBack(false, "授权失败")
                }
            }
        })
    }
    wxLoginInit = (callBack) => { //自动登录只能获取到sessionKey与openid
        if (this.getValueSync('openId')) {
            this.checkRegister(callBack); // 判断是否注册
            return;
        }
        Taro.login({
            timeout: 10000,
            success: res => {
                console.log(res)
                http.get('getOpenid', { // 获取openid
                    code: res.code
                }, false, false, false).then((d) => {
                    let data = d.datas;
                    setGlobalData('openId', data.openid)
                    this.saveSync("sessionKey", data.session_key);
                    this.saveSync("openId", data.openid);
                    this.checkRegister(callBack); // 判断是否注册
                }).catch(() => {
                    if (callBack) {
                        this.wxLoginInit(callBack); // 无法获取openid 循环操作
                    } else {
                        utils.hideLoading();
                        utils.showtoast('网络或服务器异常,请稍后重试')
                        callBack && callBack(false, "授权失败")
                    }
                });
            }, fail: (error) => {
                console.log(error)
                utils.hideLoading();
                utils.showtoast('网络或服务器异常,请稍后重试')
                callBack && callBack(false, "授权失败")
            }
        })
    }
    save = (key, value) => { //保存信息到Storage 传入key ，value
        Taro.setStorage({
            key: key,
            data: value,
        })
    }
    saveSync = (key, value) => {
        Taro.setStorageSync(key, value);
    }
    getValueSync = (key) => {
        return Taro.getStorageSync(key);
    }
    scan = (callBack) => {
        Taro.scanCode({
            onlyFromCamera: false
        }).then((res) => {
            if (res.result && res.result.indexOf('QC') > -1) {
                Taro.navigateTo({
                    url: '/pages/signin/index?MedicalkitId=' + res.result,
                    success: () => {
                        callBack && callBack()
                    }
                })
            } else {
                callBack && callBack();
                utils.showtoast('扫码失败,二维码不符合规范');
            }
        }, () => {
            callBack && callBack()
        })
    }
    previewImage = (urls = [], current = '') => {
        if (urls instanceof Array && urls.length) {
            Taro.previewImage({
                urls,
                current
            })
        }
    }
    checkRegister = (callBack) => { // 判断用户是否注册；
        http.get('IsLogin', {
            openid: getGlobalData('openId')
        }, false, false, false).then((res) => {
            setGlobalData('userInfo', res.datas)
            setGlobalData('loginid', res.datas.loginid)
            this.saveSync('loginid', res.datas.loginid);
            this.saveSync("userInfo", JSON.stringify(res.datas));
            if (callBack) {
                callBack(true, "已自动登录", res.datas);
            }
        }).catch((e) => {
            Taro.removeStorageSync('lastwardId')
            Taro.navigateTo({ //未注册，跳转到获取用户信息注册页
                url: '/pages/login/index',
            })
        });
    }
    // 在 App 类中的 render() 函数没有实际作用
    // 请勿修改此函数
    render () {
        return (
            <Provider store={store}>
                <Index />
            </Provider>
        )
    }
}

Taro.render(<App />, document.getElementById('app'))
